#include <stdio.h>
#include <stdlib.h>
#include "lib/coro.h"

coro_t *coro_p;
coro_t *coro_c;
coro_t *coro_f;

void produce()
{
    puts("PRODUCE");
    for(int i=0;i<8;i++)
    {
        printf("produce %d\n", i);
        coro_yield(i);
    }
}

void filter()
{
    puts("\tFILTER");
    for(int i=0;i<8;i++)
    {
        int x = coro_resume(coro_p)*10;
        printf("\tfilter%d->%d\n", i, x);
        coro_yield(x);
    }
}

void consume()
{
    puts("\t\tCONSUME");
    for(int i=0;i<8;i++)
    {
        int x = coro_resume(coro_f);
        printf("\t\tconsume %d\n", x);
    }
}

int main()
{
    coro_p = coro_new(produce);
    coro_c = coro_new(consume);
    coro_f = coro_new(filter);
    coro_boot(coro_c);
    return 0;
}

